Amazon Route 53のパブリックホストゾーンの作成に合わせてNotionデータベースにページを追加してみる
Amazon Route 53 のパブリックホストゾーンの作成時に、Notion API と連携してデータベースにホストゾーン名のページに追加する仕組みを試してみました。Amazon EventBridge の API 送信機能を用いて実現しました。
やってみた
システム構成のイメージです。Amazon Route 53 のパブリックホストゾーンの作成イベントに対して、Amazon EventBridge の API 送信機能で Notion API に接続します。
パブリックホストゾーンに関する Notion データベースです。Route 53 でパブリックホストゾーンがされると自動でデータベースのデータ(ページ)が追加されるようにします。
なお、今回はホストゾーンの削除時に Notion データベースのページ削除までは行っていません。Notion API でデータベースのページを削除する場合はPage ID
を指定する必要があり、ホストゾーンとPgae ID
の関連付けを把握しておく必要があります。そのため、Amazon EventBridge の API 送信機能だけでは実現できず、別の仕組みで実現する必要があります。またの機会にしたいと思います。
2022年9月21日追記
データベースのページ削除まで行ったブログを公開しました
Notion データベースの作成
Amazon Route 53 のパブリックホストゾーンの管理用データベースを次の図の通り作成します。Account ID のプロパティタイプはテキストにしています。
Ntoion API の設定
Notion API のインテグレーション設定は次のページで行います。
「新しいインテグレーション」から作成します。
基本情報は次の通り設定しました。機能としては、データベースにページを追加するための「コンテンツを挿入」のみとしており、ユーザー機能も「ユーザー情報なし」としています。
シークレットのトークン情報が表示されるため大切に管理します。
次に、前項で作成した Notion データベースに対して共有設定を行います。
データベースのページの「共有」を選択して、上記で作成したインテグレーションを選択して招待します。
設定後に「共有」メニューから付与している権限をデータベースのページから確認することもできます。
以上で Notion 側の設定は完了です。
なお、Notion API のリファレンスは次のページで公開されています。
試しにローカル環境からデータベースにページを追加してみます。
curl
コマンドでデータベースにページを追加してみます。データベースの各データの実態はページなので、ページを追加する API を利用します。後ほど、Amazon EventBridge の API 送信設定を行う際はこの形式になるように整形します。
curl -X POST https://api.notion.com/v1/pages \ -H "Authorization: Bearer secret_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \ -H "Content-Type: application/json" \ -H "Notion-Version: 2022-06-28" \ --data '{ "parent": { "database_id": "f5a676459b664c4784854ffe5example" }, "properties": { "Public Hosted Zone": { "title": [ { "text": { "content": "example.net." } } ] }, "Account ID": { "rich_text": [ { "text": { "content": "111122223333" } } ] } } }'
ページ作成に関する API は次のページに記載があり、パラメータの確認ができます。
Authorization
に Notion の API を設定した際のトークン情報を利用します。
Notion-Version
は次のページを参考に設定します。
database_id
は Notion データベースの URL におけるnotion.so/
と?v=xxxxx
の間の32桁の文字列が該当します。
コマンド実行後にデータベースにページが追加されていることを確認できました。最終更新者が作成したインテグレーションになっていることも確認できます。
Amazon EventBridge の設定
Route 53 のパブリックホストゾーン作成を契機に Notion API と連携する EventBridge の設定を行います。
作業前にリージョンをバージニア北部に変更します。Route 53 はグローバルサービスのため、バージニア北部リージョンでイベントが発行されるためです。
始めに API の送信先と接続の設定を作成します。EventBridge の「API の送信先」メニューから「API 送信先を作成」から行います。
接続の設定です。「新しい接続を作成」を選択します。
入力後に「作成」を選択すれば完了です。
API 送信先で設定している内容は下表の通りです。
設定項目名 | 値 | 補足説明 |
---|---|---|
API 送信先エンドポイント | https://api.notion.com/v1/pages | |
HTTP メソッド | POST |
接続の API キーで設定している内容は下表の通りです。
API キー名 | 値 | 補足説明 |
---|---|---|
Authorization | Bearer secret_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 値は自身のトークン情報を入力 |
次にルールの設定です。EventBridge の「ルール」メニューから「ルールを作成」から行います。
イベントパターンの設定では、イベントソースとして「AWS イベントまたは EventBridge パートナーイベント」を選択します。
イベントパターンには次の値を設定します。プライベートホストゾーンの作成を対象外とするためにprivateZone
パラメータがfalse
であることを条件にしています。
{ "source": ["aws.route53"], "detail-type": ["AWS API Call via CloudTrail"], "detail": { "eventSource": ["route53.amazonaws.com"], "eventName": ["CreateHostedZone"], "responseElements": { "hostedZone": { "config": { "privateZone": [false] } } } } }
ターゲットの選択では上記で作成した API の送信先を指定します。
ヘッダーパラメータで設定している内容は下表の通りです。
キー | 値 | 補足説明 |
---|---|---|
Content-Type | application/json | |
Notion-Version | 2022-06-28 |
追加設定における「ターゲット入力を設定」のプルダウンから「入力トランスフォーマー」を選択します。その後、「入力トランスフォーマーを設定」をクリックして入力パスとテンプレートに次の値を設定します。テンプレートのdatabase_id
は自身の Notion データベースの ID に置き換える必要があります。
{ "AccountId": "$.account", "HostedZoneName": "$.detail.responseElements.hostedZone.name" }
{ "parent": { "database_id": "f5a676459b664c4784854ffe5example" }, "properties": { "Public Hosted Zone": { "title": [ { "text": { "content": "<HostedZoneName>" } } ] }, "Account ID": { "rich_text": [ { "text": { "content": "<AccountId>" } } ] } } }
入力トランスフォーマーを設定後に「次へ」を選択して次に進みます。
タグ設定と設定内容の確認を行い、ルールを作成すれば EventBridge の完了です。
動作確認
動作確認のために Route 53 のパブリックホストゾーンを作成します。
Notion データベースを確認したところ、先程作成したパブリックホストゾーンtest.example.net.
のページが追加されていました!
以上で終了です。
さいごに
Notion API を利用して、Amazon Route 53 のパブリックホストゾーン作成に合わせて Notion データベースのページ作成を試してみました。今回はパブリックホストゾーンで試しましたが、購入・移管したドメインの管理や EC2 インスタンスの名簿作成など他の用途でも活用できそうです。